package com.demo2do.boyle.backend.service.aduser.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.demo2do.boyle.backend.dao.AduserDaoSupport;
import com.demo2do.boyle.backend.service.aduser.AduserService;
import com.demo2do.boyle.backend.service.impl.DataServiceImpl;
import com.demo2do.boyle.common.entity.aduser.Aduser;
import com.demo2do.boyle.common.entity.aduser.AduserBalance;
import com.demo2do.boyle.common.entity.aduser.AduserLevel;
import com.demo2do.boyle.common.entity.aduser.Company;
import com.demo2do.boyle.common.entity.aduser.Profile;
import com.demo2do.boyle.common.entity.aduser.order.PayType;
import com.demo2do.boyle.common.entity.aduser.transaction.AduserTransaction;
import com.demo2do.boyle.common.entity.aduser.transaction.TransactionType;
import com.demo2do.core.BusinessException;
import com.demo2do.core.persistence.GenericDaoSupport;

/**
 * 
 * @author mohanlan leo
 */
@Service("aduserService")
public class AduserServiceImpl extends DataServiceImpl<Aduser> implements AduserService {
	
	@Autowired 
	private GenericDaoSupport genericDaoSupport;
	
	@Autowired
	private AduserDaoSupport aduserDaoSupport;
	
	/*
	 * (non-Javadoc)
	 * @see com.demo2do.boyle.backend.service.AduserService#createAduser(com.demo2do.boyle.common.entity.aduser.Aduser)
	 */
	public void createAduser(Aduser aduser) {
		
		List<Aduser> adusers = aduserDaoSupport.listAduser(aduser.getMobile());
		
		if(!adusers.isEmpty()) {
			
			throw new BusinessException("该手机号码已被注册,请填写其他手机号码");
			
		} else {
			
			// 1. set default aduser level
			AduserLevel aduserLevel = aduserDaoSupport.getDefaultAduserLevel();
			
			// 2. create aduser balance
			AduserBalance aduserBlance = new AduserBalance(aduser);
			
			// 3. save aduser
			genericDaoSupport.save(aduser.initialize(aduserLevel, aduserBlance));
		
		}
		
	}

	/* (non-Javadoc)
	 * @see com.demo2do.boyle.backend.service.aduser.AduserService#editProfile(com.demo2do.boyle.common.entity.aduser.Aduser, com.demo2do.boyle.common.entity.aduser.Profile)
	 */
	public void editProfile(Aduser aduser, Profile profile) {
		genericDaoSupport.update(aduser.editProfile(profile));
	}
	
	/* (non-Javadoc)
	 * @see com.demo2do.boyle.backend.service.aduser.AduserService#editCompany(com.demo2do.boyle.common.entity.aduser.Aduser, com.demo2do.boyle.common.entity.aduser.Company)
	 */
	public void editCompany(Aduser aduser, Company company) {
		genericDaoSupport.update(aduser.editCompany(company));
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.demo2do.boyle.backend.service.aduser.AduserService#loadBalance(com.demo2do.boyle.common.entity.aduser.Aduser)
	 */
    public AduserBalance loadBalance(Integer id) {
        return genericDaoSupport.load(AduserBalance.class, id);
    }

    /* (non-Javadoc)
     * @see com.demo2do.boyle.backend.service.aduser.AduserService#editBalance(com.demo2do.boyle.common.entity.aduser.Aduser, int)
     */
    public void editBalance(Aduser aduser, int deposit) {
    	
		// 1. update aduser balance 
		genericDaoSupport.update(aduser.deposit(deposit));
		
		// 2. update aduser_balance balance and depositTotal
		AduserBalance aduserBalance = genericDaoSupport.load(AduserBalance.class, aduser.getId());
		genericDaoSupport.update(aduserBalance.deposit(deposit));
		
		// 3. create aduser_transaction
		AduserTransaction aduserTransaction = new AduserTransaction(aduser, TransactionType.DEPOSIT, PayType.INTERNAL);
		genericDaoSupport.save(aduserTransaction.initialize(deposit));
    	
    }
    /*
     * (non-Javadoc)
     * @see com.demo2do.boyle.backend.service.aduser.AduserService#loadTransactions(com.demo2do.boyle.common.entity.aduser.Aduser)
     */
	@SuppressWarnings("unchecked")
	public List<AduserTransaction> listTransactions(Aduser aduser) {
		
		return genericDaoSupport.searchForList("FROM AduserTransaction WHERE disabled = false AND aduser = :aduser", "aduser", aduser);	
	}
	
}
